package logica.veiculo;

import java.io.Serializable;
import logica.veiculo.Automovel.Porta;

/**
 * Motocicletas herdam de veiculos em geral. Essa classe eh uma das que representa
 * os veiculos que sao alugados pela locadora.
 * @author Equipe Localisa (Usa quem precisa!)
 */
public class Motocicleta extends Veiculo implements Serializable{
	
	private transient static final long serialVersionUID = 1L;
	private Freio tipoDeFreio;
	private int cilindradas;
	
	public Motocicleta() {

		super();
		this.tipoDeFreio = null;
		this.cilindradas = 0;	
	
	}

	/**
	 * @return A constante Freio que representa o tipo de freio do motocicleta
	 */
	
	public Freio getTipoDeFreio() {
		return tipoDeFreio;
	}

	/**
	 * Muda o tipo de freio da motocicleta
	 * @param tipoDeFreio O novo tipo de freio
	 * @throws Exception Se o novo tipo de freio for nulo
	 */
	
	public void setTipoDeFreio(Freio tipoDeFreio) throws Exception{
		if ( tipoDeFreio == null ){
			throw new Exception("\n \t <Tipo de feio invalido!>");
		}
		this.tipoDeFreio = tipoDeFreio;
	}

	/**
	 * @return A quantidade de cilindradas da motocicleta
	 */
	
	public int getCilindradas() {
		return cilindradas;
	}

	/**
	 * Muda a quantidade de cilindradas da motocicleta
	 * @param cilindradas A nova quantidade de cilindradas
	 * @throws Exception Se a nova quantidade de cilindradas for menor ou igual a 0
	 */
	
	public void setCilindradas(int cilindradas) throws Exception{
		if ( cilindradas <= 0 ){
			throw new Exception("\n \t <Cilindradas invalidas, nao pode ser <= 0!>");
		}
		this.cilindradas = cilindradas;
	}
	
	/* (non-Javadoc)
	 * @see logica.veiculo.Veiculo#getPortas()
	 */
	public Porta getPortas() {
		return null;
	}
	
	/* (non-Javadoc)
	 * @see logica.veiculo.Veiculo#setPortas(logica.veiculo.Automovel.Porta)
	 */
	public void setPortas(Porta portas) throws Exception{
		throw new Exception("\n \t <Moto nao tem portas!>");
	}
	
	/**
	 * Mostra uma representacao do objeto em String, revelando alguns
	 * de seus atributos
	 * @return Uma representacao em String do objeto Motocicleta
	 */
	@Override
	public String toString(){
		String format = "";
		format += "\n \t ______________________________________________________________\n";
		format += "\n \t Motocicleta de placa "+this.getPlaca()+" RENAVAM: "+this.getRenavam();
		format += "\n \t Modelo: "+this.getModelo()+" Ano: "+this.getAno()+" Marca: "+this.getMarca();
		format += "\n \t Potencia: "+this.getPotencia()+" "+this.getTipoDePotencia()+" Cilindradas: "+this.getCilindradas();
		format += "\n \t Situacao: "+this.getEstado()+" Nivel de tanque: "+this.getNivelDoTanque()+" "+this.getTipoDeCombustivel();
		format += "\n \t Data de aquisicao: "+this.getDataDeAquisicao();
		format+="\n \t Acessorios: ";
		for ( int i=0; i<this.getAcessorios().size(); i++ ){
			if ( i%3 == 0 ){
				if ( this.getAcessorios().get(i) != null ){
					format+="\n \t  "+this.getAcessorios().get(i).getDescricao();
				}
			}
			else{
				if ( this.getAcessorios().get(i) != null ){
					format+=" + "+this.getAcessorios().get(i).getDescricao();
				}
			}
		}
		format += "\n \t ______________________________________________________________\n";
		return format;
	}
}